/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.upc.clase.demo.controller;

import edu.upc.clase.demo.entity.Credential1;
import edu.upc.clase.demo.entity.CriteriosBusqueda;
import edu.upc.clase.demo.entity.Usuarios;
import edu.upc.clase.demo.service.UsuariosService;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.stereotype.Controller;

/**
 *
 * @author carlos
 */
@Controller("usuariosController")
public class UsuariosController {
    
    @Autowired
    private UsuariosService usuariosService;
    private static Logger log = LoggerFactory.getLogger(UsuariosController.class);

    @RequestMapping("/usuarios/index")
    public ModelAndView index() {
        ModelAndView mav = new ModelAndView("usuarios/index");
        List<Usuarios> usuarios = usuariosService.buscarTodos();
        CriteriosBusqueda criterioBusqueda = new CriteriosBusqueda();
        mav.addObject("usuarios", usuarios);
        mav.addObject("criterioBusqueda",criterioBusqueda);
        return mav;
    }
    
    @RequestMapping(value = "/usuarios/new", method = RequestMethod.GET)
    public ModelAndView newUsuario() {
        ModelAndView mav = new ModelAndView("usuarios/new");
        Usuarios usuarios = new Usuarios();
        mav.getModelMap().put("usuarios", usuarios);
        return mav;
    }

    @RequestMapping(value = "/usuarios/new", method = RequestMethod.POST)
    public String createUsuario(@ModelAttribute("usuarios")Usuarios usuarios, SessionStatus status) {    
        usuariosService.insertar(usuarios);
        status.setComplete();

        return "redirect:/pages/usuarios/index";
        
    }
    
    @RequestMapping(value = "/usuarios/edit", method = RequestMethod.GET)
    public ModelAndView editUsuario(@RequestParam("idUsuario")Integer idUsuario) {    
        ModelAndView mav = new ModelAndView("usuarios/edit");
        Usuarios usuarios = usuariosService.buscar(idUsuario);
        mav.getModelMap().put("usuarios", usuarios);
        return mav;        
    }
    
    @RequestMapping(value="/usuarios/edit", method=RequestMethod.POST)
    public String update(@ModelAttribute("usuarios") Usuarios usuarios, SessionStatus status) {
        usuariosService.actualizar(usuarios);
        status.setComplete();
        return "redirect:/pages/usuarios/index";
    }
    
    @RequestMapping("/usuarios/delete")
    public ModelAndView delete(@RequestParam("idUsuario")Integer idUsuario)
    {
        ModelAndView mav = new ModelAndView("redirect:/pages/usuarios/index");
        Usuarios usuarios = usuariosService.buscar(idUsuario);
        usuariosService.eliminar(usuarios);
        return mav;
    }
    
    @RequestMapping("/usuarios/login")
    public ModelAndView login() {
        ModelAndView mav = new ModelAndView("usuarios/login");
        Credential1 credential = new Credential1();
        mav.getModelMap().put("credential", credential);
        return mav;
    }    
    
    @RequestMapping(value = "/usuario/autenticar", method=RequestMethod.POST)
    public String autenticar(@ModelAttribute("credential") Credential1 credential,HttpServletRequest request) {
        if (usuariosService.autenticar(credential.getUserEmail(), credential.getUserClave())) {
            request.getSession().setAttribute("credential",credential);
            return "redirect:/pages/usuarios/index";
        }
        return "redirect:/pages/usuarios/login";
    }
    
    @RequestMapping("/usuarios/logout")
    public String logout(HttpServletRequest request) {
        request.getSession().invalidate();
        return "redirect:/pages/usuarios/login";
    }        
    
    
    @RequestMapping(value = "/usuarios/buscar", method=RequestMethod.POST)
    public ModelAndView buscar(@ModelAttribute("criterioBusqueda") CriteriosBusqueda criterio, SessionStatus status) {
        ModelAndView mav = new ModelAndView("usuarios/resultadoBusqueda");
        log.info("resultado = " + usuariosService.buscarPorNombre(criterio.getNomUsuario()).size());
        mav.getModel().put("resultado",usuariosService.buscarPorNombre(criterio.getNomUsuario()));
        return mav;
    }
    
}
